package com.season.design_pattern.singleton;

/**
 * 单例
 * 饿汉式
 * 类加载到内存中之后，static对象完成，只实例化一个单例，jvm保证线程安全
 * 简单实用
 * 缺点：不管用到与否，类装在完成实例化，浪费资源（一个实例，关系不大）
 */

/**
 * jvm 保证每一个class只会load到内存一次，static的变量是在，class load内存之后立马初始化，所以保证也只初始化一次
 */
public class Mgr01 {

    /**
     * 构造方法私有
     */
    private Mgr01(){}

    private static final Mgr01 INSTANCE = new Mgr01(); // 必须实例化，不实例化，为null，没有地址，无法使用、赋值

    public static Mgr01 getInstance(){
        return INSTANCE;
    }

    public void sout(){
        System.out.println(this);
    }

    public static void main(String[] args) {
        Mgr01 m1 = Mgr01.getInstance();
        Mgr01 m2 = Mgr01.getInstance();
        System.out.println("m1 == m2 = " + (m1 == m2));
    }

}
